Lab 3 - Behavioural VHDL -- Part 3

Finite State Machines

 

Цел

 

Придобиване на практически опит за разработване на поведенчески VHDL модели на крайни автомати.

Задание

Да се разработят поведенчески VHDL модели съгласно дедените в отделните задачи указания. Да се провери корекността на моделите посредством симулация.

 

Задача 9 -- Краен автомат "bedrock"

Да се разработи поведенчески VHDL модел на крайния автомат "bedrock", чиято диаграма на състоянията е показана на фигура 9.1.

Фигура 9.1 -- Диаграма на състоянията на крайния автомат "bedrock"


На фигура 9.2 е даден VHDL модела на крайния автомат "bedrock" (bedrock_moore.vhd). Разгледайте дадения модел и се уверете, че разбирате смисъла на VHDL конструкциите в него.

Фигура 9.2 -- Поведенчески модел на генератор на бит за нечетност


--
-- Bedrock FSM - Moore version
--

library IEEE;
use IEEE.std_logic_1164.all;

entity BEDROCK is
	port( CLK, RESET_N, BARNEY, WILMA, MICE : in std_logic;
		  FRED, DINO : out std_logic);
end BEDROCK;

architecture BEDROCK_MOORE of BEDROCK is
	type STATE_TYPE is (BED, ROCK, RUN);
	signal CURRENT_STATE, NEXT_STATE : STATE_TYPE;
begin
	STATE_REG: process(CLK, RESET_N) 
	begin
		if(RESET_N = '0')then
			CURRENT_STATE <= BED;
		elsif(CLK'event and CLK = '1')then
			CURRENT_STATE <= NEXT_STATE;
		end if;
	end process;

	NEXT_STATE_LOGIC: process(CURRENT_STATE, BARNEY, WILMA, MICE)
	begin
		case CURRENT_STATE is
		when BED =>
			if(MICE = '1')then
				NEXT_STATE <= RUN;
			elsif(BARNEY = '1')then
				NEXT_STATE <= ROCK;
			else
				NEXT_STATE <= BED;
			end if;
		when ROCK =>
			if(MICE = '1')then
				NEXT_STATE <= RUN;
			elsif(WILMA = '1')then
				NEXT_STATE <= BED;
			else
				NEXT_STATE <= ROCK;
			end if;
		when RUN =>
			if(MICE = '1')then
				NEXT_STATE <= RUN;
			elsif(WILMA = '1')then
				NEXT_STATE <= BED;
			elsif(BARNEY = '1')then
				NEXT_STATE <= ROCK;
			else
				NEXT_STATE <= BED;
			end if;
		when others =>
			NEXT_STATE <= BED;
		end case;
	end process;

	OUTPUT_LOGIC: process(CURRENT_STATE)
	begin
		case CURRENT_STATE is
		when BED =>
			FRED <= '0';
			DINO <= '0';
		when ROCK =>
			FRED <= '1';
			DINO <= '0';			
		when RUN =>
			FRED <= '1';
			DINO <= '1';
		when others =>
			FRED <= '0';
			DINO <= '0';
		end case;		
	end process;

end BEDROCK_MOORE;

Да се разработи подходяща тестова установка и да се симулира модела.

 

Задача 10 -- Краен автомат ???

Да се разработи поведенчески VHDL модел на крайния автомат "???", чиято диаграма на състоянията е показана на фигура 10.1.

Фигура 10.1 -- Диаграма на състоянията на крайния автомат "bedrock"



 

 

Указание